package cepicam.src.uc;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;

import cepicam.src.dao.AutoEcoleDAO;
import cepicam.src.dao.CategoriePermisDAO;
import cepicam.src.dao.EleveDAO;
import cepicam.src.dao.PaiementDAO;
import cepicam.src.dao.PersonneDAO;
import cepicam.src.domain.AutoEcole;
import cepicam.src.domain.CategoriePermis;
import cepicam.src.domain.Eleve;
import cepicam.src.domain.Paiement;
import cepicam.src.domain.Personne;

public class GestionEleves {

	private ArrayList<Eleve> listEleves;
	private EleveDAO elevdao;
	private PaiementDAO paiedao;
	
	private static GestionEleves instance = new GestionEleves();
	
	private GestionEleves() {
		elevdao = new EleveDAO();
		paiedao = new PaiementDAO();
	}
	
	public static GestionEleves getInstance(){
		return instance;
	}
	
	public ArrayList<Eleve> listerEleves(){
		
		ArrayList<Eleve> listelev = null;
		elevdao = new EleveDAO();
		listelev = elevdao.listerEleves();
		return listelev;
	}
	
	public ArrayList<Paiement> listerPaiements(int num_eleve){
		
		ArrayList<Paiement> listpaie = null;
		paiedao = new PaiementDAO();
		listpaie = paiedao.lister(num_eleve);
		return listpaie;
	}
	
	public Paiement ajouterPaiementPourEleve(int num_eleve,Paiement paiement){
		return paiedao.create(num_eleve, paiement);
	}
	
	public Eleve ajouterEleve(Eleve elev) throws SQLException, IllegalArgumentException {
		
		int num_ins = generateNumIns();
		elev.setNumInscription(num_ins);
		
		elev = elevdao.create(elev);
		
		return elev;
		
	}
	
	
	public int generateNumIns(){
		int num_ins=0;
		//TODO : ne fonctionne pas lorsqu'il n'y a jamais eu d'eleve dans la db
		
		Calendar cal = Calendar.getInstance();  
		int year = cal.get(cal.YEAR);  
		int month = cal.get(cal.MONTH)+1; //zero-based  
		
		num_ins = elevdao.getMaxID();
		if(num_ins != 0){
			String anneeMois = String.valueOf(num_ins).substring(0,6);
			int anneeMoisInt = Integer.parseInt(anneeMois);
			
			if(((year*100)+month) == anneeMoisInt){
				num_ins = num_ins+1;
				
			}else{
				num_ins = (((year*100)+month)*100)+1;
			}
		}else{
			
			//TODO : gerer l'erreur
			num_ins = (((year*100)+month)*100)+1;
		}
		return num_ins;
	}
	
	public ArrayList<CategoriePermis> getListCategoriesPermis(){
		ArrayList<CategoriePermis> listcat = null;
		CategoriePermisDAO cdao = new CategoriePermisDAO();
		listcat = cdao.lister();
		return listcat;
	}
	
	public ArrayList<AutoEcole> getListAE(){
		ArrayList<AutoEcole> listae = null;
		AutoEcoleDAO adao = new AutoEcoleDAO();
		listae = adao.lister();
		return listae;
	}
	
	public Eleve trouverParNumIns(String num_ins){
		System.out.println("trouverParNumIns entree");
		int num = 0;
		Eleve elev=null;
		try{
			num = Integer.parseInt(num_ins.trim());
		}catch (NumberFormatException nf){
			System.out.println("in da catch");
			return null;
		}
		EleveDAO edao = new EleveDAO ();
		System.out.println("soon dao");
		elev=edao.find(num);
		System.out.println("trouverParNumIns sortie");
		return elev;
		
	}
	
	
}
